#include "XP.h"

XP XPinitDecimal(char s[])
{
        return XP(s);
}

void XPshowDecimal(XP a)
{
        std::string s;
        a.to_string(s);
        printf("%s", s.c_str());
}

XP XPrand(int n)
{
        return XP::decimal_rand(n);
}


int XPisOdd(XP a);

int XPless(XP a, XP b)
{
        return a < b;
}
int XPeq(XP a, XP b)
{
        return a == b ? 1 : 0;
}
int XPgreater(XP a, XP b)
{
        return a > b;
}

XP XPadd(XP a, XP b)
{
        return a + b;
}

XP XPsub(XP a, XP b)
{
        return a - b;
}


XP XPmul(XP a, XP b)
{
        return a * b;
}

XP XPdiv(XP a, XP b)
{
        return a / b;
}
XP XPmod(XP a, XP b)
{
        return a % b;
}


XP XPrsa(XP a, XP b, XP n)
{
        return a.modexp(b, n);
}


int XPisPrime(XP a);              // is prime
int XPisEven(XP a)               // (a % 2 == 0)
{
        return !a.is_odd();
}
int XPisZero(XP a)               // (a == 0)
{
        return a == XP::zero;
}
int XPisPositive(XP a)           // (a  > 0)
{
        return a > XP::zero;
}
int XPdigits(XP a) // number of digits (minus leading 0's)
{
        return a.size();
}
XP  XPgcd(XP a, XP b);            // gcd(a, b)
XP  XPshortdiv(XP a, int b);      // a / b
int XPshortmod(XP a, int b);      // a % b
